人生苦短,快用Python | 写给iOS程序员的Python手册


Python 脚本在一些 iOS 开源项目中可见,经常用于自动配置等,具有上手快速,内置功能丰富等功效,macOS 也内置了 Python 2.7.10,目前在编程语言排行榜上排名第5(2017年三月份),可见其地位。
本篇的目标是让完全不懂Python的小伙伴对着能看懂*.py文件中的代码,你可以收藏本篇,作为精简的Python手册,随时查阅。

查看当前Python版本

在“终端”中输入$符号后的命令:

$python --version

Helloworld

print "hello, world!"

完整例子

#!/usr/bin/env python
# -*- coding: utf-8 -*-

class Person:
    def setName(self, name):
        self.name = name

    def getName(self):
        return self.name

    def greet(self):
        print "Hello, world! I'm %s." % self.name

aPerson = Person()
aPerson.name = "XiShiiOS"
aPerson.greet()

执行文件

用文本编辑器将以上代码保存为Demo.py,然后在“终端”中执行以下步骤:

$cd [Demo.py所在目录]
$chmod a+x Demo.py
$./Demo.py

与OC语言的最大不同

  1. 没有大括号{}
  2. 没有分号;
  3. 缩进,缩进,缩进是代码块的分界。

注意:用4个空格来缩进代码
绝对不要用tab, 也不要tab和空格混用。
——《谷歌Python编码规范 Google Python Style Guide》

  1. 没有switch语句。

逻辑运算

对应 C语言的&&(与),||(或),!(非),Python 的逻辑运算符为: and, or, not

nil

Python中用 None 来表示 nil 和 Null。

使用中文

头部声明 # -*- coding: utf-8 -*-

定义“人”类:

class Person 
    def setName(self, name):
        self.name = name

    def getName(self):
        return self.name

    def greet(self):
        print "Hello, world! I'm %s." % self.name
  1. 关键字class相当于@interface,作为一个类定义的开头。
  2. 方法定义(ObjC 里称函数方法,本篇遵循 ObjC 的命名)以 def 关键词开头,后接方法标识符名称和圆括号()。
  3. 实例方法的一个参数总是self,指代当前类(实例)本身,但self这个名字是可改的。
    关于第三点,下面举个例子,以下是错误的类函数声明:
class Person 
    def fun():
        print "just a fun."
// ...
aPerson.fun()

运行后会输出错误,表示调用时隐式传了一个参数,你却没实现:

Traceback (most recent call last):
  File "./Demo.py", line 23, in <module>
    aPerson.fun()
TypeError: fun() takes no arguments (1 given)

而以下声明是可以的,myself 代替了 self:

def fun(myself):
        print "just a fun.%s" % (myself.__class__)
// ...
aPerson.fun()

运行结果:just a fun.__main__.Person
不过尽量遵循self这样的“公约”,避免给自己找麻烦。

继承

定义一个“程序员”类,继承自Person类:

class Programmer(Person):
    def setUsingLanguage(self, language):
        self.language = language

    def getLanguage(self):
        return self.language
    
    def greet(self):
        print "Hello, world! I'm %s, I use %s language." % (self.name, self.language)

aProgrammer = Programmer()
aProgrammer.name = "XiShiiOS" #设置父类属性
aProgrammer.language = "ObjC" #设置子类属性
aProgrammer.greet() #调用子类方法,覆盖父类同名方法
运行结果

引用模块

#方法1
import math #引用模块math
math.sqrt(9) #需要使用模块名

#方法2
from math import sqrt #指定使用math中的sqrt方法
sqrt(9) #可以省略模块名

数组的替代物

不可变数组:元组

类似NSArray,Python使用tuple表示一组静态值:

tuple1 = ('physics', 'chemistry', 1997, 2000);
tuple2 = (1, 2, 3, 4, 5 );
tuple3 = "a", "b", "c", "d";

可变数组:列表

类似NSMutableArray,Python使用list表示可变数组:

list1 = ['physics', 'chemistry', 1997, 2000];
list2 = [1, 2, 3, 4, 5 ];
list3 = ["a", "b", "c", "d"];

数组遍历

fruits = ['banana', 'apple',  'mango']
for fruit in fruits:
    print '当前字母 :', fruit

检查自己是否为主入口

if __name__== "__main__":
    main()

这段代码利用了魔法方法__name__,判断当前程序的名称是否为主函数,以此来让脚本判断自己是被当做模块调用,还是被直接运行的。当被import作为模块调用的时候,__name__返回的是模块名,而不是 "main",if以下的main()函数不会被执行。

魔法方法

两个下划线包围来命名,由Python系统自动调用,如aProgrammer = Programmer() 实例化时,会自动调用__init__(self)

调用父类方法:

为了使用 super 方法,改写 Person 的声明:

class Person(object):
    def __init__(self):
        print "我首先是人类"

声明 Person 继承于基类 object ,这样才能使用 super :

class Programmer(Person):
    def __init__(self):
        super(Programmer, self).__init__()
        print "我是程序员"

super 的调用格式为:
super(当前类名, 当前实例名).父类方法名()

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,458评论 4 363
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,454评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,171评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,062评论 0 207
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,440评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,661评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,906评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,609评论 0 200
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,379评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,600评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,085评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,409评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,072评论 3 237
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,088评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,860评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,704评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,608评论 2 270

推荐阅读更多精彩内容